﻿using QuanLyThuVien.BLL;
using QuanLyThuVien.DTO;
using QuanLyThuVien.Supporter;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace QuanLyThuVien.GUI
{
    public partial class GUITaoTaiKhoan : DevComponents.DotNetBar.Office2007Form
    {
        private BLLNguoiDung _bllNguoiDung;
        private BLLDocGia _bllDocGia = new BLLDocGia();

        //----------------------------------------------------------------------
        //Desc: constructor mặc định
        //----------------------------------------------------------------------
        public GUITaoTaiKhoan()
        {
            InitializeComponent();

            KhoiTao();
        }

        //----------------------------------------------------------------------
        //Desc: khởi tạo
        //----------------------------------------------------------------------
        public void KhoiTao()
        {
            _bllNguoiDung = new BLLNguoiDung();
            _bllDocGia = new BLLDocGia();
        }

        //----------------------------------------------------------------------
        //Desc: cập nhật giao diện
        //----------------------------------------------------------------------
        public void CapNhatGiaoDien()
        {
            if (UserManager.User != null)
            {
                switch (UserManager.User.LoaiNguoiDung)
                { 
                    case LOAI_NGUOI_DUNG.NguoiQuanTri:
                        _chbThuThu.Visible = true;
                        break;

                    case LOAI_NGUOI_DUNG.ThuThu:
                        _chbThuThu.Visible = false;
                        break;
                    
                    default:
                        break;
                }
            }
        }

        //----------------------------------------------------------------------
        //Desc: kiểm tra chứa ký tự đặc biệt
        //----------------------------------------------------------------------
        private bool KiemTraChuaKyTuDacBiet(string taikhoan)
        {
            int dem = 0;
            for (int i = 0; i < taikhoan.Length; i++)
            {
                if ((taikhoan[i] >= 'a' && taikhoan[i] <= 'z')
                    || (taikhoan[i] >= 'A' && taikhoan[i] <= 'Z')
                    || (taikhoan[i] >= '0' && taikhoan[i] <= '9'))
                    dem++;
            }
            if (dem == taikhoan.Length)
                return false;
            else
                return true;
        }

        //----------------------------------------------------------------------
        //Desc: kiểm tra toàn chữ số
        //----------------------------------------------------------------------
        private bool KiemTraToanChuSo(string taikhoan)
        {
            int dem = 0;
            for (int i = 0; i < taikhoan.Length; i++)
            {
                if (taikhoan[i] >= '0' && taikhoan[i] <= '9')
                    dem++;
            }
            if (dem == taikhoan.Length)
                return true;
            else
                return false;
        }

        //----------------------------------------------------------------------
        //Desc: lấy dữ liệu
        //----------------------------------------------------------------------
        public DTONguoiDung LayDuLieu()
        {
            DTONguoiDung nguoidung = new DTONguoiDung();
            if (_txtTaiKhoan.Text.Length < 4 || _txtTaiKhoan.Text.Length > 16)
            {
                MessageBox.Show("Độ dài tài khoản từ 4 đến 16 ký tự");
                return null;
            }
            else
            {
                if (KiemTraChuaKyTuDacBiet(_txtTaiKhoan.Text))
                {
                    MessageBox.Show("Tài khoản không được chứa các ký tự đặc biệt");
                    return null;
                }

                if (_chbThuThu.Checked)
                {
                    nguoidung.LoaiNguoiDung = LOAI_NGUOI_DUNG.ThuThu;
                    if (KiemTraToanChuSo(_txtTaiKhoan.Text))
                    {
                        MessageBox.Show("Tài khoản phải chứa ít nhất một ký tự");
                        return null;
                    }
                }
                else
                    nguoidung.LoaiNguoiDung = LOAI_NGUOI_DUNG.DocGia;

                nguoidung.TaiKhoan = _txtTaiKhoan.Text;
            }

            if (_txtMatKhau.Text.Length < 4 || _txtMatKhau.Text.Length > 36)
            {
                MessageBox.Show("Độ dài mật khẩu từ 4 đến 36 ký tự");
                return null;
            }
            else
            {
                if (KiemTraChuaKyTuDacBiet(_txtMatKhau.Text))
                {
                    MessageBox.Show("Mật khẩu không được chứa các ký tự đặc biệt");
                    return null;
                }
                nguoidung.MatKhau = Utils.MaHoa(_txtMatKhau.Text);
            }

            return nguoidung;
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện form load
        //----------------------------------------------------------------------
        private void GUITaoTaiKhoan_Load(object sender, EventArgs e)
        {
            CapNhatGiaoDien();
            _chbDocGia.Checked = true;
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click tạo tài khoản
        //----------------------------------------------------------------------
        private void btnTaoTaiKhoan_Click(object sender, EventArgs e)
        {
            DTONguoiDung nguoidung = LayDuLieu();
            if (nguoidung != null)
            {
                int demtk = _bllNguoiDung.DemMaTaiKhoan(nguoidung.TaiKhoan);
                if (demtk > 0)
                    MessageBox.Show("Tài khoản đã tồn tại");
                else
                {
                    if (nguoidung.LoaiNguoiDung == LOAI_NGUOI_DUNG.DocGia)
                    {
                        if (!_bllDocGia.KiemTraDG(nguoidung.TaiKhoan))
                            MessageBox.Show("Tài khoản phải trùng với mã độc giả");
                        else
                        {
                            nguoidung.MaDG = nguoidung.TaiKhoan;
                            nguoidung.MaNhom = "NH03";
                            if (_bllNguoiDung.CapNhat(nguoidung))
                                MessageBox.Show("Tạo thành công");
                            else
                                MessageBox.Show("Tạo thất bại");
                        }
                    }
                    else
                    {
                        nguoidung.MaNhom = "NH02";
                        if (_bllNguoiDung.CapNhat(nguoidung))
                            MessageBox.Show("Tạo thành công");
                        else
                            MessageBox.Show("Tạo thất bại");
                    }
                }
            }
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click Thoat
        //----------------------------------------------------------------------
        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void chbHienMatKhau_CheckedChanged(object sender, EventArgs e)
        {
            if (_chbHienMatKhau.Checked)
                _txtMatKhau.UseSystemPasswordChar = false;
            else
                _txtMatKhau.UseSystemPasswordChar = true;
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện key press
        //----------------------------------------------------------------------
        private void Special_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Utils.IsSpecialKey(e.KeyChar))
                e.Handled = true;
            else
                e.Handled = false;
        }
    }
}
